home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / MPW_TOOL / TOOLS / TOOLS_WI / BYACC__ / DERIVES.C < prev    next >
C/C++ Source or Header  |  1989-11-19  |  904b  |  63 lines

  1. #include <stdio.h>
  2. #include "defs.h"
  3. #include "new.h"
  4. #include "gram.h"
  5.  
  6. set_derives()
  7. {
  8.   register int i, k;
  9.   register int lhs;
  10.   register short *rules;
  11.  
  12.   derives = NEW2(nsyms, short *);
  13.   rules = NEW2(nvars + nrules, short);
  14.  
  15.   k = 0;
  16.   for (lhs = start_symbol; lhs < nsyms; lhs++)
  17.     {
  18.       derives[lhs] = rules + k;
  19.       for (i = 0; i < nrules; i++)
  20.     {
  21.       if (rlhs[i] == lhs)
  22.         {
  23.           rules[k] = i;
  24.           k++;
  25.         }
  26.     }
  27.       rules[k] = -1;
  28.       k++;
  29.     }
  30.  
  31. #ifdef    DEBUG
  32.   print_derives();
  33. #endif
  34. }
  35.  
  36. free_derives()
  37. {
  38.   FREE(derives[start_symbol]);
  39.   FREE(derives);
  40. }
  41.  
  42. #ifdef    DEBUG
  43. print_derives()
  44. {
  45.   register int i;
  46.   register short *sp;
  47.  
  48.   printf("\nDERIVES\n\n");
  49.  
  50.   for (i = start_symbol; i < nsyms; i++)
  51.     {
  52.       printf("%s derives ", symbol_name[i]);
  53.       for (sp = derives[i]; *sp >= 0; sp++)
  54.     {
  55.       printf("  %d", *sp);
  56.     }
  57.       putchar('\n');
  58.     }
  59.  
  60.   putchar('\n');
  61. }
  62. #endif
  63.